package com.rawchen.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.rawchen.entity.Comment;
import com.rawchen.model.vo.PageComment;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Description: 博客评论持久层接口
 */
@Mapper
@Repository
public interface CommentMapper extends BaseMapper<Comment> {
	/**
	 * 按页面和父评论id查询评论List
	 *
	 * @param page            评论种类
	 * @param blogId          评论所在博客ID
	 * @param parentCommentId 父评论ID
	 */
	List<Comment> getListByPageAndParentCommentId(Integer page, Long blogId, Long parentCommentId);

	/**
	 * 按父评论id查询评论List
	 *
	 * @param parentCommentId 父评论ID
	 */
	List<Comment> getListByParentCommentId(Long parentCommentId);

	/**
	 * 查询页面展示的评论List
	 *
	 * @param page            评论种类
	 * @param blogId          评论所在博客ID，注意博客必须是公开的
	 * @param parentCommentId 父评论ID
	 */
	List<PageComment> getPageCommentListByPageAndParentCommentId(Integer page, Long blogId, Long parentCommentId);

	/**
	 * 按id查询评论
	 *
	 * @param id 评论ID
	 */
	Comment getCommentById(Long id);

	/**
	 * 更新评论公开状态
	 *
	 * @param commentId 评论ID
	 * @param published 是否公开
	 */
	int updateCommentPublishedById(Long commentId, Boolean published);

	/**
	 * 更新评论接收邮件提醒状态
	 *
	 * @param commentId 评论ID
	 * @param notice    是否接收邮件提醒
	 */
	int updateCommentNoticeById(Long commentId, Boolean notice);

	/**
	 * 按博客id删除博客下所有评论
	 *
	 * @param blogId 博客ID
	 */
	int deleteCommentsByBlogId(Long blogId);

	/**
	 * 更新评论
	 *
	 * @param comment 新的评论数据
	 */
	int updateComment(Comment comment);

	/**
	 * 按评论种类查询评论数量
	 *
	 * @param page   评论种类
	 * @param blogId 博客ID
	 */
	int countByPageAndIsPublished(Integer page, Long blogId);

	int saveComment(com.rawchen.model.dto.Comment comment);
}
